Package de.yaams.maker.helper.gui

Source Code of de.yaams.maker.helper.gui.YEx

/**
*
*/
package de.yaams.maker.helper.gui;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.HashMap;

import com.ezware.common.Strings;
import com.ezware.dialog.task.TaskDialog;
import com.ezware.dialog.task.TaskDialog.StandardCommand;

import de.yaams.maker.helper.Log;
import de.yaams.maker.helper.SystemHelper;
import de.yaams.maker.helper.gui.form.FormTextArea;
import de.yaams.maker.helper.gui.form.FormTextField;
import de.yaams.maker.helper.gui.form.core.FormBuilder;
import de.yaams.maker.helper.gui.form.core.FormHeader;
import de.yaams.maker.helper.gui.icons.IconCache;
import de.yaams.maker.helper.language.I18N;
import de.yaams.maker.programm.YAamsCore;
import de.yaams.maker.programm.YaFrame;
import de.yaams.maker.programm.environment.YLevel;

/**
* @author abt
*
*/
public class YEx {

  /**
   * Show the last exit message, awt will use for rendering
   *
   * User see the message/some stack and can close it
   *
   * @param title
   * @param t
   */
  public static void lastExit(final String title, final Throwable t) {
    t.printStackTrace();
    Frame f = new Frame("Fatal error");
    f.addWindowListener(new WindowAdapter() {

      @Override
      public void windowClosing(WindowEvent arg0) {
        SystemHelper.exit(2);
      }
    });

    // build gui
    Panel p = new Panel(new BorderLayout());
    p.add(new Label(title), BorderLayout.NORTH);
    p.add(new Label(Strings.stackStraceAsString(t)), BorderLayout.CENTER);

    Button b = new Button("Send Data");
    b.addActionListener(new ActionListener() {

      @Override
      public void actionPerformed(ActionEvent arg0) {
        sendError(t, "fatal error: " + title, "", "");
        SystemHelper.exit(2);

      }
    });
    p.add(b, BorderLayout.SOUTH);

    f.add(p);
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }

  /**
   * Show a fatal message, the programm can not be used and will close
   *
   * User can send it (or try),close program and view it
   *
   * @param title
   * @param t
   */
  protected static void mess(String title, String typ, Throwable t, String icon, String mess, boolean exit) {

    try {
      TaskDialog task = new TaskDialog(YaFrame.get(), "");

      // show it
      // build form
      FormBuilder f = new FormBuilder("errorform.info");
      f.getHeader("basic").setTitle(I18N.t("Weitere Infos (freiwillig)")).setIcon("edit");
      f.addElement(
          "basic.contact",
          YSettingHelper.text(null, I18N.t("eMail"), "reporting.contact", "").setInfoTxt(
              I18N.t("Füge hier deine eMailadresse ein, wenn du eine Antwort wünscht oder Nachfragen erlaubst.")));
      f.addElement("basic.details", new FormTextArea(I18N.t("Ablauf"), "").setInfoTxt(I18N
          .t("Schreibe hier rein, was passiert ist, was du getan hast, wie es zu dem Fehler gekommen ist.")));

      // add details
      f.addHeader("error", new FormHeader(I18N.t("Details"), icon).setCollapsed(true));
      f.addElement("error.class", new FormTextField(I18N.t("Class"), t.getClass().toString()));
      f.addElement("error.mess", new FormTextField(I18N.t("Message"), YEx.toString(title, t, false)));
      f.addElement("error.stack", new FormTextArea(I18N.t("Stack"), Strings.stackStraceAsString(t)));

      task.setInstruction(I18N.t("{0}bericht einsenden", typ));
      task.setText(mess + (YLevel.IS_ADVANCED ? "<br>" + YEx.toString(title, t, false) : ""));
      task.setIcon(IconCache.get(icon, 64));
      task.setResizable(true);
      task.setFixedComponent(f.getPanel(true));
      task.setCommands(StandardCommand.OK.derive(I18N.t("{0} einsenden", typ), "mail"),
          StandardCommand.CANCEL.derive(I18N.t(exit ? "Programm beenden" : "Ignorieren"), "cancel"));
      TaskDialog.Command erg = task.show();
      if (erg != null && erg.getTitle().equals(I18N.t("{0} einsenden", typ))) {
        // send feedback
        sendError(t, title, f.getElement("basic.contact").getContentAsString(), f.getElement("basic.details").getContentAsString());
      } else {
        // close?
        if (exit) {
          SystemHelper.exit(0);
        }
      }

    } catch (Throwable t2) {
      lastExit("Errorreportingerror: " + YEx.toString(mess, t2, false), t2);
    }

    // YDialog.showForm(, "web_edit", f);
    // showMessage(title, I18N.t("{0} has a big problem and must be close.",
    // YAamsCore.NAME), t,
    // UIManager.getIcon("OptionPane.errorIcon"), true, true, false, true);
  }

  /**
   * Show a fatal message, the programm can not be used and will close
   *
   * User can send it (or try),close program and view it
   *
   * @param title
   * @param t
   */
  public static void fatal(String title, Throwable t) {
    // log error
    Log.ger.fatal(toString(title, t, false), t);

    // show it
    mess(title, "Schaden", t, "error", I18N.t("{0} hat ein großes Problem und muss beendet werden.", YAamsCore.TITLE), true);
  }

  /**
   * Show a error message, this program module can not be used and will close,
   * but the program can used
   *
   * User can send it or ignore it (advanced user also can view the message)
   *
   * @param title
   * @param t
   */
  public static void error(String title, Throwable t) {
    // log error
    Log.ger.error(toString(title, t, false), t);

    mess(title,
        "Fehler",
        t,
        "error",
        I18N.t("<html>Ein Modul hat ein sehr großes Problem und muss beendet werden. Die Stabilität von {0} kann nicht mehr gewährleistet werde.<br> Es kann weiter laufen muss es aber nicht. Der Fehler sollte auf jeden Fall eingeschickt werden.",
            YAamsCore.TITLE), true);

  }

  /**
   * Show a warning message, this program module has a problem, but will
   * handle it
   *
   * User can send it or ignore it (advanced user also can view the message)
   *
   * @param title
   * @param t
   */
  public static void warn(String title, Throwable t) {
    // log error
    Log.ger.warn(toString(title, t, false), t);

    // show it
    mess(title,
        "Problem",
        t,
        "warn",
        I18N.t("<html>Ein Modul hat ein Fehler verursacht, normallerweise ist alles in Ordnung, aber manchmal können Daten verloren gehen.<br> Wenn du die Nachricht zum ersten Mal siehst, sende Sie ein, damit das Problem behoben werden kann. Danach kann Sie ignoriert werden."),
        false);

  }

  /**
   * Show a info message, this program module has a simple problem, but can
   * easy handle it
   *
   * User can send it or ignore it (advanced user also can view the message)
   *
   * @param title
   * @param t
   */
  public static void info(String title, Throwable t) {
    // log error
    Log.ger.info(toString(title, t, false), t);

    // show it
    mess(title,
        "Problem",
        t,
        "info",
        I18N.t("<html>Ein Modul hat ein Fehler verursacht, aber alles ist in Ordnung. Wenn du die Nachricht zum Ersten Mal siehst, sende Sie ein, <br>damit das Problem behoben werden kann. Danach kann es ignoriert werden."),
        false);

  }

  /**
   * @param t
   */
  protected static void sendError(Throwable t, String title, String author, String comment) {
    // collect data
    HashMap<String, String> data = new HashMap<String, String>();

    data.put("messages", t.getMessage());
    data.put("class", t.getClass().toString());
    data.put("stack", Strings.stackStraceAsString(t));
    data.put("type", "error");
    data.put("author", author);
    data.put("comment", comment);
    data.put("title", title);

    // send it
    SystemHelper.sendData("error", "Error - " + t.getMessage(), data);
  }

  /**
   * Add Cause
   *
   * @param t
   * @return
   */
  public static String toString(String mess, Throwable t, boolean print) {
    // print?
    if (print) {
      Log.ger.info(mess, t);
    }

    StringBuffer erg = new StringBuffer(mess);
    erg.append(" (");
    erg.append(t.getClass().getSimpleName());
    erg.append(": ");
    erg.append(t.getLocalizedMessage());

    // add cause?
    if (t.getCause() != null) {
      erg.append(", Caused by ");
      erg.append(t.getCause().getClass().getSimpleName());
      erg.append(": ");
      erg.append(t.getCause().getLocalizedMessage());
    }

    erg.append(") ");
    return erg.toString();
  }
}
TOP

Related Classes of de.yaams.maker.helper.gui.YEx

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.